﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace OcenyOpisowe.Core.ModelMappers
{
	/// <summary>
	/// Interfejs bazowy dla każdego mappera obiektów bazodanowych.
	/// </summary>
	public interface IModelMapper
	{
		/// <summary>
		/// Mapuje obiekt źródłowy posiadający podany źródłowy typ na wyjściowy typ.
		/// </summary>
		/// <typeparam name="T1">Typ wejściowego obiektu, którego zamapować na wyjściowy typ.</typeparam>
		/// <typeparam name="T2">Wyjściowy typ obiektu.</typeparam>
		/// <param name="source">Źródłowy obiekt do zamapowania.</param>
		/// <returns>Zamapowany obiekt.</returns>
		T2 Map<T1, T2>(T1 source);
		/// <summary>
		/// Mapuje obiekt źródłowy posiadający podany źródłowy typ na wyjściowy typ.
		/// </summary>
		/// <param name="source">Źródłowy obiekt do zamapowania.</param>
		/// <param name="sourceType">Typ wejściowego obiektu, którego zamapować na wyjściowy typ.</param>
		/// <param name="destinationType">Wyjściowy typ obiektu.</param>
		/// <returns>Zamapowany obiekt.</returns>
		object Map(object source, Type sourceType, Type destinationType);
	}
}
